package com.example.litterpainterdemo.draw.shapes

import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.PointF
import android.util.Log

abstract class Shape {
    var paintColor:Int = 0
    var strokeWidth:Int = 0
    open var startPoint = PointF(0f,0f) //起点
    var endPoint = PointF(0f,0f) //终点
    val mPaint: Paint by lazy {
        Paint().also {
            it.color = paintColor
            it.strokeWidth = strokeWidth.toFloat()
            it.isAntiAlias = true
            it.style = Paint.Style.STROKE
        }
    }

    private var translateX = 0f
    private var translateY = 0f

    fun move(mx:Float,my:Float){
        translateX = mx
        translateY = my
    }

    fun fillShape(color:Int){
        mPaint.color = color
        mPaint.style = Paint.Style.FILL
    }

    //判断触摸点是否在形状内部
    abstract fun insideTheShape(dx:Float,dy:Float):Boolean

    abstract fun drawShape(canvas: Canvas?)

//    fun draw(canvas: Canvas){
//        //将当前的已经绘制的图形保存一下
//        //当调用save方法时，当前画布的状态会被保存在一个堆栈中，
//        //然后可以继续对画布进行一系列的绘图操作这些操作不会影响之前保存的状态
//        canvas.save()
//        if (translateX != 0f || translateY != 0f) {//满足的话，说明在移动该形状
//                //移动画布
//                //translate()方法不会移动已经绘制的图形，而只会改变之后绘制的图形的位置。
//                canvas.translate(translateX, translateY)
//        }
//
//        //绘制
//        drawShape(canvas)
//        //恢复画布之前的状态
//        canvas.restore()
//        startPoint.x += translateX
//        startPoint.y += translateY
//        endPoint.x += translateX
//        endPoint.y += translateY
//        translateX = 0f
//        translateY = 0f
//
//
//    }
    fun draw(canvas: Canvas){
        //将当前的已经绘制的图形保存一下
        //当调用save方法时，当前画布的状态会被保存在一个堆栈中，
        //然后可以继续对画布进行一系列的绘图操作这些操作不会影响之前保存的状态
        //canvas.save()
        if (translateX != 0f || translateY != 0f) {//满足的话，说明在移动该形状
            //移动画布
            //translate()方法不会移动已经绘制的图形，而只会改变之后绘制的图形的位置。
            startPoint.x += translateX
            startPoint.y += translateY
            endPoint.x += translateX
            endPoint.y += translateY
        }

        //绘制
        drawShape(canvas)
        //恢复画布之前的状态
        //canvas.restore()

        translateX = 0f
        translateY = 0f


    }




}